# 生成随机的测验试卷文件
# 假如你是一位地理老师,班上有35名学生,你希望进行美国各州首府的一个小测验。不妙的是,班里有几个坏蛋,你无法确信学生不会作弊。
# 你希望随机调整问题的次序,这样每份试卷都是独一无二的,这让任何人都不能从其他人那里抄袭答案。
# 当然,手工完成这件事又费时又无聊。好在,你懂一些Python。

# 下面是程序所做的事:
# 创建35份不同的测验试卷。
# 为每份试卷创建50个多重选择题,次序随机。
# 为每个问题提供一个正确答案和3个随机的错误答案,次序随机。
# 将测验试卷写到35个文本文件中。
# 将答案写到35个文本文件中。

import random
import os
import shutil

# 将测验数据保存在一个字典中
capitals = {"黑龙江": "哈尔滨", "吉林": "长春", "辽宁": "沈阳", "内蒙古自治区": "呼和浩特", "北京": "北京", "天津": "天津", "河北": "石家庄", "山东": "济南",
            "山西": "太原", "陕西": "西安", "甘肃": "兰州", "新疆维吾尔自治区": "乌鲁木齐", "青海": "西宁", "西藏自治区": "拉萨", "四川": "成都", "河南": "郑州",
            "江苏": "南京", "安徽": "合肥", "湖北": "武汉", "重庆": "重庆", "贵州": "贵阳", "湖南": "长沙", "江西": "南昌", "上海": "上海", "浙江": "杭州",
            "福建": "福州", "云南": "昆明", "广西壮族自治区": "南宁", "广东": "广州", "海南": "海口", "香港特别行政区": "香港", "澳门特别行政区": "澳门",
            "台湾": "台北"}

# 检查文件夹是否存在，不存在则创建文件夹
# if os.path.exists(os.path.join("./quiz")):
#     shutil.rmtree(os.path.join("quiz"))

# 如果已经有文件夹了，则exist_ok=True设置为不报异常，也不重新创建文件夹
os.makedirs(os.path.join("quiz"), exist_ok=True)


for quizNum in range(30):
    # 创建测验文件和答案文件
    quizFile = open("./quiz/capitalsquiz%s.txt" % (quizNum + 1), "w")
    answerKeyFile = open("./quiz/capitalsquiz_answer%s.txt" % (quizNum + 1), "w")

    # 写入文件头
    quizFile.write("Name:\n\nDate:\n\nPeriod:\n\n")
    quizFile.write((" " * 20) + "省会城市测试（Form %s）" % (quizNum + 1))
    quizFile.write("\n\n")

    # 打乱省会的顺序
    states = list(capitals.keys())
    random.shuffle(states)

    # 将内容写入测验试卷和答案文件
    for questionNum in range(30):
        # 获取正确答案和错误答案
        correctAnswer = capitals[states[questionNum]]
        wrongAnswers = list(capitals.values())
        del wrongAnswers[wrongAnswers.index(correctAnswer)]
        wrongAnswers = random.sample(wrongAnswers, 3)
        answerOptions = wrongAnswers + [correctAnswer]
        random.shuffle(answerOptions)

        # 将内容写入测验试卷文件
        quizFile.write("%s. %s的省会城市是?\n" % (questionNum + 1, states[questionNum]))
        for i in range(4):
            quizFile.write("%s. %s\n" % ("ABCD"[i], answerOptions[i]))
        quizFile.write("\n")

        # 将内容写入答案文件
        answerKeyFile.write("%s. %s\n" % (questionNum + 1, "ABCD"[answerOptions.index(correctAnswer)],))

    quizFile.close()
    answerKeyFile.close()
